/*
Read names of objects in a directory

Usage:
        d = new dir(<dirname>);
        while (typeof(filename = d->read()) ....
*/

#ifndef _io_dir
#define _io_dir 1
#endif

class dir { namebuf; buf; offset; r; }
dir::dir (name)
{
namebuf = newstring(256);
in namebuf put { name;};
namebuf[sizeof(name)] = 0;
@buf = @(newstring(256));
offset = 0;
r = newvector(8);
return this;
}

dir::read()
{
r[0] = 9;
r[1] = @(namebuf);
r[2] = @buf;
r[3] = 1;
r[4] = offset;
r[5] = 256;
r[6] = 0;
swi(12,r);  //OS_GBPB
offset = r[4];
return r[3]?$(@buf):nil;
}